﻿#include "UserAddDlg.h"
#include "UserAddDlg.h"
#include "UserAddDlg.h"


UserAddDlg::UserAddDlg(QWidget* parent)
	:QWidget(parent)
{
	this->setWindowTitle("用户添加");
	this->resize(300, 200);		
	this->setWindowFlag(Qt::FramelessWindowHint);						//去掉边框和状态栏；
	QObject::installEventFilter(new eventFilterObject(this));			//自由拖动窗口
	this->setStyleSheet(R"(background-color:rgb(40,40,40);
									color:white;)");
	this->setAttribute(Qt::WA_StyledBackground);						//根据样式来哦修改背景


	init();
}

UserAddDlg::~UserAddDlg()
{

}

void UserAddDlg::init()
{
	m_user_id_edit = new QLineEdit;
	m_user_id_edit->setStyleSheet("border:none;background-color:white;color:black;");
	m_username_edit = new QLineEdit;
	m_username_edit->setStyleSheet("border:none;background-color:white;color:black;");
	m_mobile_edit = new QLineEdit;
	m_mobile_edit->setStyleSheet("border:none;background-color:white;color:black;");
	m_email_edit = new QLineEdit;
	m_email_edit->setStyleSheet("border:none;background-color:white;color:black;");
	m_group_gender = new QButtonGroup;
	m_gender_boy = new QRadioButton("男");
	m_gender_secret = new QRadioButton("保密");
	m_gender_gril = new QRadioButton("女");
	m_group_password = new QButtonGroup;
	m_default_password_rbtn = new QRadioButton("默认密码");
	m_custom_password_rbtn = new QRadioButton("自定义密码");
	m_password_edit = new QLineEdit;
	m_password_edit->setStyleSheet("background-color:white;color:black");
	m_ok_btn = new QPushButton("ok");
	m_cancel_btn = new QPushButton("cancel");


	//总体布局：
	m_totality_layout = new QVBoxLayout(this);
	m_totality_layout->setSizeConstraint(QLayout::SetFixedSize);			//将布局的大小约束设置为固定大小，也就是布局的大小将被固定为一个固定的宽度和高度

	//窗口顶层的标题和关闭按钮部分的布局：
	{
		auto hlayout = new QHBoxLayout;

		//标题：
		auto title = new QLabel("添加用户窗口");
		title->setStyleSheet("font:bold 13px");						//设置标题为加粗字体，再设置字体大小为13px；
		hlayout->addWidget(title);

		hlayout->addStretch();

		//关闭按钮：
		m_closeBtn = new QPushButton;
		m_closeBtn->setIcon(QIcon(":/ClientResource/close.png"));				//设置关闭按钮的图标
		hlayout->addWidget(m_closeBtn);

		//把顶层部分添加到总体布局上：
		m_totality_layout->addLayout(hlayout);
	}

	m_totality_layout->addSpacerItem(new QSpacerItem(1, 30));				//添加 宽度为1，高度为30个像素；


	//输入内容部分布局：
	auto form_layout = new QFormLayout;

	form_layout->addRow("<font color=red>*</font>用户id >", m_user_id_edit);
	form_layout->addRow(new QLabel("<font size=2 face='微软雅黑' color='gray'>最大长度64位，允许英文字母、数字</font>"));
	form_layout->addRow("<font color=red>*</font>用户名 >", m_username_edit);
	form_layout->addRow(new QLabel("<font size=2 face='微软雅黑' color='gray'>最大长度64位，允许英文字母、数字、特殊字符</font>"));
	
	//性别部分布局：
	{
		auto hlayout = new QHBoxLayout;
		hlayout->addWidget(m_gender_boy);
		hlayout->addStretch();
		hlayout->addWidget(m_gender_secret);
		hlayout->addStretch();
		hlayout->addWidget(m_gender_gril);

		//添加到输入内容部分布局：
		form_layout->addRow(hlayout);
	}
	
	form_layout->addRow("<font color=red>*</font>电话号码 >", m_mobile_edit);
	form_layout->addRow(new QLabel("<font size=2 face='微软雅黑' color='gray'>最大长度11位，允许数字及-符号</font>"));
	form_layout->addRow("<font color=red>*</font>电子邮箱 >", m_email_edit);
	form_layout->addRow(new QLabel("<font size=2 face='微软雅黑' color='gray'>最大长度32位，允许英文字母、数字、@</font>"));

	//密码单选框部分布局：
	{
		auto hlayout = new QHBoxLayout;
		hlayout->addSpacing(50);
		hlayout->addWidget(m_default_password_rbtn);
		hlayout->addWidget(m_custom_password_rbtn);
		hlayout->addStretch();		//弹簧

		//添加到输入内容部分布局：
		form_layout->addRow("密码选择",hlayout);
	}

	//把输入内容部分布局添加到总体布局：
	m_totality_layout->addLayout(form_layout);

	//自定义密码部分布局：
	m_password_layout = new QFormLayout;
	m_password_layout->addRow("<font color=red>*</font>自定义密码 >", m_password_edit);
	m_password_layout->addRow(new QLabel("<font size=2 face='微软雅黑' color='gray'>最大长度64位，允许英文字母、数字、符号</font>"));
	//把自定义密码部分布局添加到总体布局：
	m_totality_layout->addLayout(m_password_layout);
	

	//确认按钮部分布局：
	{
		auto hlayout = new QHBoxLayout;
		hlayout->addWidget(m_ok_btn);
		hlayout->addStretch();		//弹簧
		hlayout->addWidget(m_cancel_btn);

		//添加到总体布局：
		m_totality_layout->addLayout(hlayout);
	}


	//布局初始化中的设置:
	initset();

	//信号槽连接：
	connectinit();



}

void UserAddDlg::setUserData(const QJsonObject& object)
{
	//获取用户数据：
	m_user = object;
}

void UserAddDlg::initset()
{
	//设置默认值：
	m_user_id_edit->setText(QDateTime::currentDateTime().toString("yyyyMMddhhmmsszz"));

	//设置性别组：
	m_group_gender->addButton(m_gender_boy);
	m_group_gender->addButton(m_gender_secret);
	m_group_gender->addButton(m_gender_gril);

	//设置密码组：
	m_group_password->addButton(m_default_password_rbtn);
	m_group_password->addButton(m_custom_password_rbtn);
	//要分别性别和密码，让单选框分开，		不然都是一组的话，只有一个能选择;


	//设置默认是默认密码，并且隐藏密码输入框：
	m_default_password_rbtn->setChecked(true);

	//默认设置是自定义密码的布局中的所有项都隐藏起来：
	m_password_layout->setRowVisible(0, false);
	m_password_layout->setRowVisible(1, false);

}

void UserAddDlg::connectinit()
{
	//点击了关闭按钮。关闭窗口:
	connect(m_closeBtn, &QPushButton::clicked, this, [=]
		{
			emit endShow();
			this->close();
		});
	//点击了自定义密码，再弹出密码输入框：
	connect(m_custom_password_rbtn, &QRadioButton::toggled, [=](bool checked)
		{
			//把自定义密码的布局中的所有项都显示出来：
			m_password_layout->setRowVisible(0, true);
			m_password_layout->setRowVisible(1, true);

			m_password_edit->setText(QDateTime::currentDateTime().toString("yyyyMMdd"));
		});
	//点击了默认密码，去除密码输入框：
	connect(m_default_password_rbtn, &QRadioButton::toggled, [=](bool checked)
		{
			//把自定义密码的布局中的所有项都隐藏出来：
			m_password_layout->setRowVisible(0, false);
			m_password_layout->setRowVisible(1, false);
		});

	//确认按钮：
	connect(m_ok_btn, &QPushButton::released, this, [=]
		{
			//性别：
			int gender{};
			if (m_gender_boy->isChecked())
			{
				gender = 1;
			}
			else if (m_gender_gril->isChecked())
			{
				gender = 2;
			}
			else
			{
				gender = 0;
			}

			//密码：
			QString password = m_password_edit->text();
			if (m_default_password_rbtn->isChecked())
			{
				//默认密码：
				password = "123456";
			}


			//如果用户名、电话号码和电子邮件为空就不能注册成功：
			if (m_username_edit->text().isEmpty() || m_mobile_edit->text().isEmpty() || m_email_edit->text().isEmpty())
			{
				QMessageBox::about(0, QObject::tr("No~~~"), "必写项不能为空");
				return;
			}

			m_user.insert("user_id", m_user_id_edit->text());
			m_user.insert("username", m_username_edit->text());
			m_user.insert("gender", gender);
			m_user.insert("mobile", m_mobile_edit->text());
			m_user.insert("email", m_email_edit->text());
			m_user.insert("password", password);
			m_user.insert("isEnable", 1);


			SHttpClient(QUrl("http://" + sApp->globalConfig()->value("host/host").toString() + QString("/api/user/create")))
				.debug(true)
					.header("Authorization", "Bearer" + sApp->userData("user/token").toString())
						.json(m_user)
							.fail([](const QString& msg, int code)
								{
									qDebug() << msg << code;
								})
								.success([=](const QByteArray& array)
									{
										QJsonParseError error;
										auto jdocument = QJsonDocument::fromJson(array, &error);
										if (error.error != QJsonParseError::NoError && jdocument["code"].toInt() > 1000)
										{
											return;
										}
										else
										{
											emit userDataChanged(m_user);
											emit endShow();
										}
									})
									.post();

		});
	//取消按钮，关闭该窗口：
	connect(m_cancel_btn, &QPushButton::clicked, this, [=]()
		{
			emit endShow();
			this->close();
		});

}

